<?php
include_once("conectorBD.php");
class ModeloBD   {

    protected $_oBaseDatos;
    protected $_sTabla;


    public function __construct(){
        //Abrimos un flujo de conexion con nuestro componente
        $this->_oBaseDatos = CBaseDatos::get_instancia();
        $this->_oBaseDatos->conectar();
        //var_dump($this->oBaseDatos);
    }

    /**
     * Sobre los 3 metodos: query(), query_object() y execute()
     * Lo ideal seria crear una clase madre con los atributos:
     * oBaseDatos, id, sTabla y estos metodos de modo que todos los
     * modelos hereden (extiendan) estas propiedades.
     * La definicion de esta clase seria: class MUsuario extends ModeloMadre{..}.
     * No lo he puesto
     * aqui porque el post seria demasiado extenso.
     */

    /**
     * Se utiliza para SQLs tipo SELECT, es decir, de lectura y
     * devuelve un array con el resultado
     */
    public function query($sSQL) {
        $arTabla = array();
        try {
            /**
             * resource = mysql_query ( string $query [, resource $link_identifier ] )
             * Aqui entra en juego nuestro Componente tipo singleton CBaseDatos
             */
            $oResult = mysql_query($sSQL, $this->_oBaseDatos->get_link_id());

            /**
             * array = mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )
             */
            while ($arFila = mysql_fetch_array($oResult, MYSQL_ASSOC)) {
                $arTabla[$this->_sTabla][] = $arFila;
                echo '' .$this->_sTabla;
            }

            //Array que tiene como indices los nombres de los campos
            //$arTabla['tbl_usuario'][iNumeroFila] = array('id'=>'valor','nombre'=>'valor'...);
            return $arTabla;
        } catch (Exception $e) {
            die("Metodo query: Error al ejecutar la sentencia SQL = $sSQL");
        }
    }

    /**
     * Se utiliza para SQLs tipo SELECT, es decir, de lectura y
     * devuelve un array con el resultado parecido al anterior
     * pero este crea un array de pseudo objetos. de modo que puedas
     * recuperar un item del array en forma de $arUsuario[$i]->nombre su equivalente
     * en el metodo anterior seria $arUsuario[$i]['nombre'].
     */
    public function query_object($sSQL) {
        $arTabla = array();

        $oResult = mysql_query($sSQL, $this->_oBaseDatos->get_link_id());

        if ($oResult) {
            while ($arFila = mysql_fetch_object($oResult)) {
                $arTabla[] = $arFila;
            }
        } else {
            die("Metodo query_object: Error al ejecutar la sentencia SQL = $sSQL");
        }
        //$arTabla[$i]->id, $arTabla[$i]->nombre, $arTabla[$i]->clave ...
        return $arTabla;
    }

    /**
     * Este metodo ejecuta una SQL de escritura.
     * estas son INSERT, UPDATE y DELETE
     */
    public function execute($sSQL) {
        try {
            //$this->oTfw->set_sql($sSQL);
            $oResult = mysql_query($sSQL);
            //@mysql_query("SET NAMES utf8"); 

            if (!$oResult) {
                $sMensaje = "Sentencia SQL con errores: " . mysql_error() . "\n";
                $sMensaje .= "SQL =" . $sSQL;
                die($sMensaje);
            }
        } catch (Exception $e) {
            
        }
    }
}

?>
